package com.woniuxy.controller.goodsGeneralAndSmallAndBrand;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.woniuxy.demo.Result;
import com.woniuxy.entity.GoodsSmall;
import com.woniuxy.entity.GoodsSmaller;
import com.woniuxy.param.goodsGeneralAndSmallAndBrand.*;
import com.woniuxy.service.GoodsSmallService;
import com.woniuxy.service.GoodsSmallerService;
import com.woniuxy.util.ValidatedUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author 范腾龙
 * @since 2021-12-31
 * 商品三级类信息管理的后端接口
 */
@RestController
@Api(tags = "关于商品三级类信息管理的接口")
@RequestMapping("/goods-smaller")
public class GoodsSmallerController {

    @Autowired
    private GoodsSmallerService goodsSmallerService;

    /**
     * 根据小类id单条查询三级类信息
     *
     * @param id 小类信息id
     * @return 根据小类id查询到的三级类信息
     */
    @GetMapping("/getSmallerBySmallId/{id}")
    @ApiOperation("根据小类id单条查询三级类信息")
    public Result getSmallerBySmallId(@PathVariable("id") Integer id) {
        /*小类页面的查看下级按钮的处理：因为三级类冗余了小类id，
        因此点击查看下级，拿到小类id，在该接口根据小类id查询三级类信息 返回给前端展示*/
        GoodsSmaller goodsSmaller = goodsSmallerService.getOne(new QueryWrapper<GoodsSmaller>().eq("goods_small_id", id));
        return Result.newInstance().setCode(200).setMsg("查询成功")
                .setData(goodsSmaller);
    }


    /**
     * 根据小类id查询多条三级类信息
     *
     * @param id 小类id
     * @return 根据小类id查询到的三级类信息集合
     */
    @GetMapping("/listSmallerBySmallId/{id}")
    @ApiOperation("根据小类id单条查询三级类信息")
    public Result listSmallerBySmallId(@PathVariable("id") Integer id) {
        /*小类页面的查看下级按钮的处理：因为三级类冗余了小类id，
        因此点击查看下级，拿到小类id，在该接口根据小类id查询三级类信息 返回给前端展示*/
        List<GoodsSmaller> goodsSmaller = goodsSmallerService.list(new QueryWrapper<GoodsSmaller>().eq("goods_small_id", id));
        return Result.newInstance().setCode(200).setMsg("查询成功")
                .setData(goodsSmaller);
    }

    /**
     * 新增三级类信息后端接口
     *
     * @param bindingResult        参数验证
     * @param addGoodsSmallerParam 前端传递的新增三级类信息
     * @return 返回给前端的新增三级类信息
     */
    @PostMapping("/addSmallerInfo")
    @ApiOperation("新增三级类信息")
    public Result addSmallerInfo(@Validated @RequestBody AddGoodsSmallerParam addGoodsSmallerParam, BindingResult bindingResult) {
        //参数验证
        ValidatedUtil.ValidatedException(bindingResult);
        return Result.newInstance().setCode(200).setMsg("新增成功")
                .setData(goodsSmallerService.saveSmallerInfo(addGoodsSmallerParam));
    }


    /**
     * 分页查询三级类信息后端接口
     *
     * @param bindingResult         参数验证
     * @param listGoodsSmallerParam 前端传递的三级类分页信息
     * @return 返回给前端的分页和模糊查询后的三级类信息集合
     */
    @PostMapping("/pageSmallerInfo")
    @ApiOperation("分页查询三级类信息")
    public Result pageSmallerInfo(@Validated @RequestBody ListGoodsSmallerParam listGoodsSmallerParam, BindingResult bindingResult) {
        //参数验证
        ValidatedUtil.ValidatedException(bindingResult);
        return Result.newInstance().setCode(200).setMsg("查询成功")
                .setData(goodsSmallerService.pageFind(listGoodsSmallerParam));
    }


    /**
     * 修改三级类信息后端接口
     *
     * @param bindingResult           参数验证
     * @param updateGoodsSmallerParam 前端传递的三级类修改的信息
     * @return 返回给前端的三级类修改后的信息
     */
    @PostMapping("/updateSmallInfo")
    @ApiOperation("修改三级类信息")
    public Result updateSmallInfo(@Validated @RequestBody UpdateGoodsSmallerParam updateGoodsSmallerParam, BindingResult bindingResult) {
        //参数验证
        ValidatedUtil.ValidatedException(bindingResult);
        return Result.newInstance().setCode(200).setMsg("修改成功")
                .setData(goodsSmallerService.updateSmallerInfo(updateGoodsSmallerParam));
    }


    /**
     * 批量删除三级类信息后端接口
     *
     * @param bindingResult      参数验证
     * @param deleteSmallerParam 前段传递的要删除的三级类信息的id集合
     * @return
     */
    @PostMapping("/removeSmallerInfo")
    @ApiOperation("批量删除小类信息")
    public Result removeSmallerInfo(@Validated @RequestBody DeleteSmallerParam deleteSmallerParam, BindingResult bindingResult) {
        //参数验证
        ValidatedUtil.ValidatedException(bindingResult);
        if (goodsSmallerService.deleteGoodsSmaller(deleteSmallerParam))
            return Result.newInstance().setCode(200).setMsg("删除成功");
        return Result.newInstance().setCode(500).setMsg("删除失败");
    }


    /**
     * 根据三级类id查询三级类信息
     *
     * @param id 三级类信息id
     * @return 根据三级类id查询的三级类信息数据
     */
    @GetMapping("/getSmallerById/{id}")
    @ApiOperation("单个查询三级类信息")
    public Result getSmallerById(@PathVariable("id") Integer id) {
        return Result.newInstance().setCode(200).setMsg("查询成功")
                .setData(goodsSmallerService.getById(id));
    }

    /**
     * 查询所有三级类信息
     * @return 查询的三级类信息数据
     */
    @GetMapping("/listSmaller")
    @ApiOperation("单个查询三级类信息")
    public Result listSmaller() {
        return Result.newInstance().setCode(200).setMsg("查询成功")
                .setData(goodsSmallerService.list());
    }
}

